package cn.lasse.springframework.context.annotation;

import cn.hutool.core.util.ClassUtil;
import cn.lasse.springframework.beans.factory.config.BeanDefinition;
import cn.lasse.springframework.stereotype.Component;

import java.util.LinkedHashSet;
import java.util.Set;

public class ClassPathScanningCandidateComponentProvider {
    /**
     * 通过这个方法就可以扫描指定包路径下所有包含@Component 注解的 Bean对象。
     */
    public Set<BeanDefinition> findCandidateComponents(String basePackage) {
        Set<BeanDefinition> candidates = new LinkedHashSet<>();
        /**
         * 扫描指定包路径下所有包含指定注解的类
         */
        Set<Class<?>> classes = ClassUtil.scanPackageByAnnotation(basePackage, Component.class);
        for (Class<?> classItem : classes) {
            candidates.add(new BeanDefinition(classItem));
        }
        return candidates;
    }
}
